草庐IT

TypeScript 运算符

全部标签

c++ - 流运算符重载

为什么应该将流操作符(>)的重载作为friend而不是让它们成为类的成员? 最佳答案 当您将二元运算符重载为类的成员函数时,当第一个操作数是类类型时使用重载。对于流运算符,第一个操作数是流而不是(通常)自定义类。因此,设计用于以常规方式使用的自定义类的重载流运算符不能是自定义类的成员函数,它们必须是自由函数。(我假设流类未开放更改;如果它们是开放的,您可以将成员函数添加到流类以处理额外的自定义类型,但从依赖性的角度来看,这通常是不可取的。)他们是否是friend应该取决于他们是否需要访问类(class)的非公开成员。

c++ - 指向指针的指针和运算符的地址如何工作?

拿这段代码:inta;int*pointer=&a;int**b=&(&(*pointer));上面是否将b设置为pointer的地址?我之所以这么问是因为*pointer给出了a的值,而它的引用就是a的地址。这只是作为a的地址处理,还是也作为pointer处理。这有意义吗?我可以这样做吗:&(*pointer)=a; 最佳答案 没有。在C语言中,您只能获得指向存储区域的指针(这意味着变量、数组元素或另一个指针;他们称这些为“左值”),而不是任何表达式。您无法获得指向未定义存储区域的表达式的指针(如加法或函数调用的结果)。然而,应该

c++ - 增量运算符/迭代器实现

我想在这里弄清楚几件事:如何为具有指向下一个节点的指针的节点类编写递增运算符?如何为如下类实现迭代器?#include#includeusingnamespacestd;templateclassNode{public:Node(inti=0):val(i){}Node*&operator++(inti=0){returnnext;};Tval;Node*next;};//================================================intmain(){Node*head,*tmp1,*tmp2;tmp1=newNode(0);head=tmp1;fo

c++ - 抽象类和运算符!= 在 C++ 中

我在从抽象类派生的集合类中实现operator!=时遇到问题。代码如下所示:classAbstract{public://tomakethesyntaxeasierlet'susearawpointervirtualbooloperator!=(constAbstract*other)=0;};classImplementation{SomeObjectimpl_;//thatalreadyimplementtheoperator!=public:booloperator!=(constAbstract*other){returndynamic_cast(other)->impl_!=

c++ - 如何在 C++ 中为数组重载运算符<<?

我正在尝试这样做:templateostream&operator但是可以T代表一个数组?重载是否正确?数组的运算符?编辑:根据KerrekSB的建议,这是我对的实现:templateostream&operator我的实现是否正确?我遇到编译错误。 最佳答案 你可以这样做:templatestd::ostream&operator当然,这仅适用于编译时数组。请注意,当T时不允许实例化此模板。是内置类型或std中的类型命名空间!如果可能的话,最好使这个内联,因为你会为每个N产生一个单独的实例化。.(prettyprinter有这样的

C++ new 运算符——内存布局

new运算符是否保证分配连续的堆内存块?IE。是objects=newBase[1024];在内存分配方面与objects=(Base*)malloc(1024*sizeof(base));还是可以有差距? 最佳答案 是的,内存会是连续的。在分配方面,它与malloc版本相同,但有几个区别(调用构造函数,new不返回NULL,malloc不会抛出异常等`).请注意,您不能将new[]与delete或free混淆,您必须使用delete[]对象释放内存。 关于C++new运算符——内存布局

c++ - 如何用位运算代替取模和除法运算?

我有这行代码:base_num=(arr[j]/base)%256;此行在循环中运行,操作“/”和“%”需要大量资源和时间来执行。我想更改此行并应用位操作以最大化程序性能。我该怎么做?谢谢。 最佳答案 如果base是2的n次方,则可以用向右移动n位来代替除法。然后,由于取一个整数的mod256等同于取它的最后8位,你可以用0xFF与它。或者,如果您将AND与256*base进行运算,然后将n向右移位,则可以反转操作。base_num=arr[j]>>n;base_num&=0xFF;当然,任何半正经的编译器都应该能够为您完成这项工作

c++ - 如何使用非类型参数重载类模板的 << 运算符?

我正在尝试重载operator类模板的,像这样:templateclassScreen{templatefriendostream&operator&);private:intwidth;intlength;public:Screen():width(V1),length(V2){}};templateostream&operator&screen){os上面的代码运行正确!但我想知道是否有任何方法可以重载operator通过不将其设置为函数模板的方式:friendostream&operator&);? 最佳答案 是的,但您必须预

具有反向关联顺序的 C++ 重载运算符

很难想出一个标题...(我的母语不是英语。)structA{intvalue;Aoperator+(inti)const{Aa;a.value=value+i;returna;};};intmain(){Aa;a.value=2;a=a+2;return0;}此代码按预期编译/工作,但当我将a=a+2更改为a=2+a时,它将不再编译。GCC给我这个错误:nomatchfor”operator+”in”2+a”有没有办法让2+a像a+2一样工作? 最佳答案 你需要一个自由函数,在类之后定义structA{//...};Aoperato

c++ - 我需要手动声明 >= 和 <= 运算符吗?

如果我已经定义了operator>和operator(和operator==),我还需要定义operator>=和operator,或者如果我故意不声明它们,编译器会为我声明它们吗?此外,如果我定义了operator==,编译器会为我声明operator!=吗? 最佳答案 不,编译器不会声明/定义您未手动定义的任何运算符。但是,Boost.Operators可能符合您的喜好-它完全符合您希望编译器执行的操作。 关于c++-我需要手动声明>=和 https://stackov